using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using MakeIT.Framework.Util;
using MakeIT.Look.Imagem.Entidades;
using MakeIT.Look.Imagem.Negocios;

namespace MakeIT.Look.Imagem.Apresentacao
{
	public partial class CadastroOrcamento : System.Web.UI.Page
	{

		UsuarioVO usuarioVO = null;
		protected LookDAOT LookDAOT = null;

		protected void Page_Load(object sender, EventArgs e)
		{
			this.LookDAOT = new LookDAOT();
			usuarioVO = (UsuarioVO)this.Session["userActive"];

			if (!IsPostBack)
			{
				Util.HabilitarCampos(false, this.panelCad);
				atualizarDdlIdEventoTipo(null, null);
			}

		}

		protected void Page_Unload(object sender, EventArgs e)
		{
			try
			{
				if (this.LookDAOT != null)
					this.LookDAOT.closeDAO();
			}
			catch (Exception ex) {}
		}

		protected void grvResultado_PageIndexChanging(object sender, GridViewPageEventArgs e)
		{
			this.grvResultado.PageIndex = e.NewPageIndex;
			btnPesquisa_Click(null, null);
		}
		protected void atualizarDdlIdEventoTipo(object sender, ImageClickEventArgs e)
		{
			List<EventotipoVO> idEventoTipoCadVOs = new List<EventotipoVO>();
			EventotipoVO idEventoTipoCadVO = EventotipoVO.CreateVO();
			idEventoTipoCadVO.idEventoTipo = -1;
			idEventoTipoCadVO.eventoTipo = "";
			idEventoTipoCadVOs.Add(idEventoTipoCadVO);
			idEventoTipoCadVOs.AddRange(this.LookDAOT.getEventotipos());
			Util.CarregarCombo(this.ddlCadIdEventoTipo, idEventoTipoCadVOs);

			EventotipoVO idEventoTipoVO = EventotipoVO.CreateVO();
			idEventoTipoVO.idEventoTipo = -1;
			idEventoTipoVO.eventoTipo = "";
			List<EventotipoVO> idEventoTipoVOs = new List<EventotipoVO>();
			idEventoTipoVOs.Add(idEventoTipoVO);
			idEventoTipoVOs.AddRange(this.LookDAOT.getEventotipos());
			Util.CarregarCombo(this.ddlIdEventoTipo, idEventoTipoVOs);

		}

		/// <summary>
		/// Manipula o evento do botão btnSalvar
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnSalvar_Click(object sender, EventArgs e)
		{

			//Declara objetos
			OrcamentoVO orcamentoVO = null;
			bool novoRegistro = false;

			try
			{
				//Verifica se o ID é nulo, se sim = cadastro novo
				if (string.IsNullOrEmpty(this.txtCadIdOrcamento.Text))
				{
					orcamentoVO = OrcamentoVO.CreateVO();
					orcamentoVO.cadastro = DateTime.Now;
					orcamentoVO.cadastradoPor = usuarioVO.user;

					novoRegistro = true;

				}
				//Recupera dados para serem alterados
				else
				{
					//Recupera dados
					orcamentoVO = this.LookDAOT.getOrcamento(Int32.Parse(this.txtCadIdOrcamento.Text));
				}

				if(string.IsNullOrEmpty(this.txtCadOrigem.Text))
					orcamentoVO.origem = null;
				else
					orcamentoVO.origem = this.txtCadOrigem.Text;
				orcamentoVO.atendido = this.ddlCadAtendido.SelectedValue.Equals("S");
				orcamentoVO.contato = this.txtCadContato.Text;
				orcamentoVO.fones = this.txtCadFones.Text;
				orcamentoVO.email = this.txtCadEmail.Text;
				if(string.IsNullOrEmpty(this.txtCadDtEvento.Text))
					orcamentoVO.dtEvento = null;
				else
					orcamentoVO.dtEvento = DateTime.Parse(this.txtCadDtEvento.Text);
				if(string.IsNullOrEmpty(this.txtCadConvidados.Text))
					orcamentoVO.convidados = null;
				else
					orcamentoVO.convidados = Int32.Parse(this.txtCadConvidados.Text);
				if(string.IsNullOrEmpty(this.txtCadCerimonia.Text))
					orcamentoVO.cerimonia = null;
				else
					orcamentoVO.cerimonia = this.txtCadCerimonia.Text;
				if(string.IsNullOrEmpty(this.txtCadRecepcao.Text))
					orcamentoVO.recepcao = null;
				else
					orcamentoVO.recepcao = this.txtCadRecepcao.Text;
				if(string.IsNullOrEmpty(this.txtCadMensagem.Text))
					orcamentoVO.mensagem = null;
				else
					orcamentoVO.mensagem = this.txtCadMensagem.Text;
				orcamentoVO.idEventoTipo = Int32.Parse(this.ddlCadIdEventoTipo.SelectedValue);
				orcamentoVO.edicao = DateTime.Now;
				orcamentoVO.editadoPor = usuarioVO.user;

				//Chama metodo para salvar ou criar novo registro
				if (novoRegistro)
					orcamentoVO.idOrcamento = (int)this.LookDAOT.newOrcamento(orcamentoVO);
				else
					this.LookDAOT.setOrcamento(orcamentoVO);

				// Exibe msg de sucesso ao salvar registro
				Util.ExibeAlert(this, "Registro salvo com sucesso!");

				//Popula grid atualizado
				this.btnPesquisa_Click(null, null);

				//Atualiza formulario, apos salvar os dados
				this.txtCadIdOrcamento.Text = orcamentoVO.idOrcamento.ToString();
				this.ltCadastradoPor.Text = orcamentoVO.cadastradoPor;
				this.ltEditadoPor.Text = orcamentoVO.editadoPor;
				this.ltDataCadastro.Text = orcamentoVO.cadastro.ToString("dd/MM/yyyy");
				this.ltDataEdicao.Text = orcamentoVO.edicao.ToString("dd/MM/yyyy");

			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		/// <summary>
		/// Manipula o evento do botão btnPesquisa
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnPesquisa_Click(object sender, EventArgs e)
		{

			//Declara objetos
			int? idOrcamento = null;
			string origem = null;
			bool? atendido = null;
			string contato = null;
			string fones = null;
			string email = null;
			DateTime? dtEvento = null;
			string cerimonia = null;
			string recepcao = null;
			int? idEventoTipo = null;

			try
			{

				if (!string.IsNullOrEmpty(this.txtIdOrcamento.Text))
				{
					idOrcamento = Int32.Parse(this.txtIdOrcamento.Text);
				}

				if (!string.IsNullOrEmpty(this.txtOrigem.Text))
				{
					origem = this.txtOrigem.Text;
				}

				if(!this.ddlAtendido.SelectedValue.Equals(" "))
				{
					atendido = this.ddlAtendido.SelectedValue.Equals("S");
				}

				if (!string.IsNullOrEmpty(this.txtContato.Text))
				{
					contato = this.txtContato.Text;
				}

				if (!string.IsNullOrEmpty(this.txtFones.Text))
				{
					fones = this.txtFones.Text;
				}

				if (!string.IsNullOrEmpty(this.txtEmail.Text))
				{
					email = this.txtEmail.Text;
				}

				if (!string.IsNullOrEmpty(this.txtDtEvento.Text))
				{
					dtEvento = DateTime.Parse(this.txtDtEvento.Text);
				}

				if (!string.IsNullOrEmpty(this.txtCerimonia.Text))
				{
					cerimonia = this.txtCerimonia.Text;
				}

				if (!string.IsNullOrEmpty(this.txtRecepcao.Text))
				{
					recepcao = this.txtRecepcao.Text;
				}

				if(!this.ddlIdEventoTipo.SelectedValue.Equals("-1"))
				{
					idEventoTipo = Int32.Parse(this.ddlIdEventoTipo.SelectedValue);
				}


				//Recupera a lista de registros segundo a pesquisa
				this.grvResultado.DataSource = this.LookDAOT.getOrcamentos(idOrcamento, contato, idEventoTipo, origem, atendido, fones, email, dtEvento, cerimonia, recepcao);

				//Vincula os dados
				this.grvResultado.DataBind();
			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		/// <summary>
		/// Manipula o evento do botão btnCancelar
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnCancelar_Click(object sender, EventArgs e)
		{
			//Volta para a tab page de pesquisa
			//this.tabOrcamento.ActiveTabIndex = 0;

			// Desabilita os campos para edição
			Util.HabilitarCampos(false, this.panelCad);

			// Destrava botão de edição
			this.btnEditar.Enabled = (!string.IsNullOrEmpty(this.txtCadIdOrcamento.Text));

			// Destrava botão de exclusao
			this.btnExcluir.Enabled = (!string.IsNullOrEmpty(this.txtCadIdOrcamento.Text));

			// Detrava botão de novo
			this.btnNovo.Enabled = true;

			// Desabilita o botão salvar
			this.btnSalvar.Enabled = false;

		}

		protected void imgbVisualizar_Click(object sender, ImageClickEventArgs e)
		{
			// Declara objetos
			OrcamentoVO orcamentoVO = null;
			int idOrcamento = 0;

			try
			{
				//Recupera os argumentos com o ID do objeto
				string[] argumentos = ((ImageButton)sender).CommandArgument.Split(';');
				idOrcamento = Int32.Parse(argumentos[0]);

				//Recupera o objeto
				orcamentoVO = this.LookDAOT.getOrcamento(idOrcamento);

				this.txtCadIdOrcamento.Text = orcamentoVO.idOrcamento.ToString();
				this.txtCadOrigem.Text = orcamentoVO.origem;
				this.ddlCadAtendido.SelectedValue = (orcamentoVO.atendido==null?" ":(orcamentoVO.atendido.Value?"S":"N"));
				this.txtCadContato.Text = orcamentoVO.contato;
				this.txtCadFones.Text = orcamentoVO.fones;
				this.txtCadEmail.Text = orcamentoVO.email;
				if(orcamentoVO.dtEvento==null)
					this.txtCadDtEvento.Text = null;
				else
					this.txtCadDtEvento.Text = orcamentoVO.dtEvento.Value.ToString("dd/MM/yyyy");
				if(orcamentoVO.convidados==null)
					this.txtCadConvidados.Text = null;
				else
					this.txtCadConvidados.Text = orcamentoVO.convidados.Value.ToString();
				this.txtCadCerimonia.Text = orcamentoVO.cerimonia;
				this.txtCadRecepcao.Text = orcamentoVO.recepcao;
				this.txtCadMensagem.Text = orcamentoVO.mensagem;
				this.ddlCadIdEventoTipo.SelectedValue = orcamentoVO.idEventoTipo.ToString();
				this.ltCadastradoPor.Text = orcamentoVO.cadastradoPor;
				this.ltEditadoPor.Text = orcamentoVO.editadoPor;
				this.ltDataCadastro.Text = orcamentoVO.cadastro.ToString("dd/MM/yyyy");
				this.ltDataEdicao.Text = orcamentoVO.edicao.ToString("dd/MM/yyyy");

				//Habilita tab page do cadastro
				this.tabOrcamento.ActiveTabIndex = 1;

				//Desabilita campos para edição
				Util.HabilitarCampos(false, this.panelCad);

				//Desabilita botão salvar
				this.btnSalvar.Enabled = false;

				//Habilita botão editar
				this.btnEditar.Enabled = true;

				//Habilita botão excluir
				this.btnExcluir.Enabled = true;

				//Habilita botão novo
				this.btnNovo.Enabled = true;

			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		// <summary>
		// Manipula o evento editar do web form
		// </summary>
		// <param name="sender">Objeto disparador de evento</param>
		// <param name="e">Argumento do evento</param>
		protected void btnEditar_Click(object sender, EventArgs e)
		{
			// Habilita os campos para edição
			Util.HabilitarCampos(true, this.panelCad);

			// Trava apenas os text box da PK
			this.txtCadIdOrcamento.Enabled = false;

			// Trava botão de edição
			this.btnEditar.Enabled = false;

			// Trava botão de exclusao
			this.btnExcluir.Enabled = false;

			// Trava botão de novo
			this.btnNovo.Enabled = false;

			// Habilita o botão salvar
			this.btnSalvar.Enabled = true;

			this.txtCadContato.Focus();
		}

		protected void btnNovo_Click(object sender, EventArgs e)
		{
			//Limpa formulario, para a entrada de novo registro
			Util.LimparCampos(this.panelCad);
			// Habilita os campos para edição
			Util.HabilitarCampos(true, this.panelCad);

			this.ltCadastradoPor.Text = "";
			this.ltEditadoPor.Text = "";
			this.ltDataCadastro.Text = "";
			this.ltDataEdicao.Text = "";

			// Trava apenas os text box da PK
			this.txtCadIdOrcamento.Enabled = false;

			// Trava botão de edição
			this.btnEditar.Enabled = false;

			// Trava botão de exclusao
			this.btnExcluir.Enabled = false;

			// Trava botão de novo
			this.btnNovo.Enabled = false;

			// Habilita o botão salvar
			this.btnSalvar.Enabled = true;

			this.txtCadContato.Focus();

		}

		protected void btnExcluir_Click(object sender, EventArgs e)
		{
			//Declara objetos
			OrcamentoVO orcamentoVO = null;

			try
			{
				//Cria objeto
				orcamentoVO = OrcamentoVO.CreateVO();
				orcamentoVO.idOrcamento = Int32.Parse(this.txtCadIdOrcamento.Text);

				//Chama metodo para excluir registro
				this.LookDAOT.delOrcamento(orcamentoVO);

				// Exibe msg de sucesso ao salvar registro
				Util.ExibeAlert(this, "Registro excluido com sucesso!");

				//Popula grid atualizado
				this.btnPesquisa_Click(null, null);

				//Limpa formulario, apos salvar os dados
				Util.LimparCampos(this.panelCad);
				this.ltCadastradoPor.Text = "";
				this.ltEditadoPor.Text = "";
				this.ltDataCadastro.Text = "";
				this.ltDataEdicao.Text = "";

				// Trava botão de edição
				this.btnEditar.Enabled = false;

				// Trava botão de exclusao
				this.btnExcluir.Enabled = false;

				// Desabilita o botão salvar
				this.btnSalvar.Enabled = false;

				// Habilita o botao novo
				this.btnNovo.Enabled = true;

			}
			catch (Exception ex)
			{

				throw ex;
			}
			
		}

	}
}
